package top.v5it.japi.plus.support.limit;

import java.lang.annotation.*;

/**
 * 限流注解
 * <p>
 * 用于controller方法，限制接口请求次数
 * </p>
 *
 * @author zhanpu
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JapiLimit {

    /**
     * 限制大小，允许请求多少次，默认空不作限制，可支持SpEL表达式
     *
     * @return
     */
    String limit() default "0";

    /**
     * key
     *
     * @return
     */
    String limitKey() default "";

    /**
     * 限制时间，如10秒钟限制limit个请求，默认10秒，可支持SpEL表达式
     *
     * @return
     */
    String time() default "10";

    /**
     * 限流类型
     *
     * @return
     */
    Type type() default Type.GLOBAL;

    /**
     * 限流类型
     */
    enum Type {

        /**
         * 全局，针对处于整个网络中的应用单个接口流量合计计算
         */
        GLOBAL,

        /**
         * 针对单个接口独自计算
         */
        SIGNAL
    }

}
